from django.db import models
from Testproject.models import TestProjectModel


# Create your models here.

class TestInterfaceModel(models.Model):
    """
    接口模型类
    | 字段      | 类型         | 空   | 默认  | 注释               |
    |:------- |:---------- |:--- | --- | ---------------- |
    | id      | int        | 否   |     | 自增长主键ID          |
    | project | ForeignKey | 否   |     | 关联项目             |
    | name    | varchar    | 否   |     | 接口名称             |
    | url     | varchar    | 否   |     | 接口地址             |
    | method  | varchar    | 否   |     | 请求方法             |
    | type    | varchar    | 否   | 1   | 接口类型(项目接口、第三方接口) |

    """
    CHOICES = {
        ('1', '本项目接口'),
        ('2', '第三方接口')
    }
    project = models.ForeignKey(TestProjectModel, on_delete=models.CASCADE, verbose_name="项目", help_text="项目帮助")
    name = models.CharField(max_length=50, verbose_name="接口名", help_text="接口名帮助")
    url = models.CharField(max_length=50, verbose_name="接口地址", help_text="接口地址帮助")
    method = models.CharField(max_length=10, verbose_name="接口请求方法", help_text="接口请求方法帮助")
    type = models.CharField(max_length=10, verbose_name="接口类型", help_text="接口类型帮助", choices=CHOICES,
                            default='1')

    def __str__(self):
        return self.url

    class Meta:
        db_table = "test_interface"
        verbose_name_plural = "接口表"


class TestInterfaceCaseModel(models.Model):
    """
    | 字段              | 类型         | 空   | 默认  | 注释        |
    |:--------------- |:---------- |:--- | --- | --------- |
    | id              | int        | 否   |     | 自增长主键ID   |
    | title           | varchar    | 否   |     | 用例名称      |
    | interface       | ForeignKey | 否   |     | 所属接口      |
    | headers         | json       | 是   | {}  | 请求头配置     |
    | request         | json       | 是   | {}  | 请求参数      |
    | file            | json       | 是   | []  | 请求上传文件的参数 |
    | setup_script    | TextField  | 是   |     | 前置脚本      |
    | teardown_script | TextField  | 是   |     | 后置断言脚本    |

    """
    title = models.CharField(max_length=50, verbose_name="用例名称", help_text="用例名称")
    interface = models.ForeignKey(TestInterfaceModel, on_delete=models.CASCADE, verbose_name="所属接口",
                                  help_text="所属接口")
    headers = models.JSONField(null=True, blank=True, default=dict, verbose_name="请求头配置", help_text="请求头配置")
    request = models.JSONField(null=True, blank=True, default=dict, verbose_name="请求参数", help_text="请求参数")
    file = models.JSONField(null=True, blank=True, default=list, verbose_name="请求上传文件的参数",
                            help_text="请求上传文件的参数")
    setup_script = models.TextField(verbose_name="前置脚本", help_text="前置脚本", null=True, blank=True, default="")
    teardown_script = models.TextField(verbose_name="后置断言脚本", help_text="后置断言脚本", null=True, blank=True,
                                       default="")

    def __str__(self):
        return self.title

    class Meta:
        db_table = "test_interface_cases"
        verbose_name_plural = "接口用例表"
